from fastapi import APIRouter, Request, HTTPException
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import os
import glob
import markdown
from utils.logger import logger
from urllib.parse import quote

router = APIRouter()

# 设置模板目录
templates = Jinja2Templates(directory="templates")

# 文档目录路径
DOCS_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "static", "md")
logger.info(f"文档工具初始化，DOCS_DIR路径: {DOCS_DIR}")
# 检查目录是否存在
if not os.path.exists(DOCS_DIR):
    logger.warning(f"文档目录 {DOCS_DIR} 不存在，将尝试使用相对路径")
else:
    logger.info(f"文档目录存在，包含文件: {os.listdir(DOCS_DIR) if os.path.exists(DOCS_DIR) else '目录不存在'}")

# 检查相对路径
rel_path = os.path.join("static", "md")
if os.path.exists(rel_path):
    logger.info(f"相对路径文档目录存在，包含文件: {os.listdir(rel_path)}")
else:
    logger.warning(f"相对路径文档目录 {rel_path} 不存在")

@router.get("/{doc_id}", response_class=HTMLResponse)
async def doc_page(request: Request, doc_id: str):
    """显示单个文档的页面"""
    logger.info(f"接收到文档请求，文档ID: {doc_id}")
    try:
        # 直接返回空模板，由前端通过API获取数据
        logger.info(f"渲染文档模板 {doc_id}")
        # 从工具配置模块导入工具分类
        from api.tools_config import tool_categories
        
        # 创建一个tool变量，以满足base_tool.html模板的需求
        tool = {
            "name": "文档查看",
            "description": "查看详细文档说明",
            "icon": "book",
            "categories": ["documentation"]
        }
        
        return templates.TemplateResponse(
            "tools/documentation.html",
            {"request": request, "categories": tool_categories, "doc_id": doc_id, "tool": tool}
        )
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"获取文档内容失败: {str(e)}")

def get_doc_tools():
    """获取所有文档作为工具列表项"""
    try:
        # 获取所有md文件 - 首先尝试DOCS_DIR路径
        md_files = glob.glob(os.path.join(DOCS_DIR, "*.md"))
        
        # 如果没有找到文件，尝试使用相对路径
        if not md_files:
            alt_path = os.path.join("static", "md", "*.md")
            md_files = glob.glob(alt_path)
            
        # 构建文档工具列表
        doc_tools = []
        for file_path in md_files:
            file_name = os.path.basename(file_path)
            doc_id = os.path.splitext(file_name)[0]
            
            # 使用文件名作为标题
            title = os.path.splitext(os.path.basename(file_path))[0]
            
            # 处理文件名，移除数字前缀（如"01_"、"1."等格式）
            import re
            display_title = re.sub(r'^\d+[_.-]\s*', '', title)
            
            # 确保中文文档ID正确编码
            encoded_doc_id = quote(doc_id, safe='', encoding='utf-8')
            logger.info(f"添加文档工具，原始ID: {doc_id}, 编码后ID: {encoded_doc_id}")
            
            doc_tools.append({
                "id": f"doc-{doc_id}",
                "name": display_title,
                "description": "查看详细文档说明",
                "icon": "book",
                "categories": ["documentation"],
                # "route": f"/api/documentation/content?doc={encoded_doc_id}"
                "route": f"/doc/{encoded_doc_id}"
                # "route": f"/tools/documentation?doc={encoded_doc_id}"
            })
        
        return doc_tools
    except Exception as e:
        # 如果出错，记录错误并返回空列表
        logger.error(f"获取文档工具列表失败: {str(e)}")
        return []